const Koa=require("koa");
let app=new Koa();
/* 
    koa中间件通过next函数控制中间件执行流程
    koa中当一个中间件调用next()，则该中间件函数暂停并将控制传递给定义的下一个中间件
    当在下游没有更多的中间件执行后，上游中间件恢复执行 
*/

// next()：用于响应结束后的功能加载(日志记录，错误处理...)
app.use(async function(ctx,next){
    await next();
    console.log("响应结束=====>");
});

// next():用于中间流程的功能控制(静态资源的处理，数据加载...)
app.use(async function(ctx,next){
    console.log("=====>请求到达处理");
    //next函数被定义在中间件的逻辑代码中间，表示该函数的逻辑部分分为两个部分，一部分在下游中间件执行完成之前执行，一部分在下游中间件完成后执行
    await next();
    console.log("======>响应处理结果");
});

//next:用于中间的最后的响应处理
app.use(async function(ctx){
    console.log("=====>处理响应结果");
    ctx.body="哈哈哈哈";
    // 该中间件没有调用next函数，因此定义在该中间件下游的中间件不会被执行
    // koa的开发中，以中间件调用next函数表示请求完成操作，开始响应结果的处理，并向上游中间件进行回转
});

app.use(async function(ctx,next){
    console.log("最后定义的中间件");
});
app.listen(3000);